# include<stdio.h>
# include<mysql/mysql.h>
# include"cgi_base.h"//直接把query_string和body里面的数据读到缓冲区里面

int main()
{
  fprintf(stderr,"[IN CGI]\n");
  //0、获取query_string
//  char buf[1024*4]={0};
 // if(GetQueryString(buf)<0){
  //  fprintf(stderr,"GetQueryString failed\n");
 //   return 1;
 // }
  /*接下来就要进行数据库的查找，直接
   * 把数据库中所有的数据都一股脑查出来
   mysql使用的一般思路：
   1、连接到数据库
   2、拼接sql语句
   3、把sql语句发送到服务器
   4、读取并遍历服务器返回的结果
   5、断开连接*/
//1、连接到数据库，定义mysql结构体指针，相当于一个句柄
   MYSQL *connect_fd=mysql_init(NULL);//有了一个空遥控器
   MYSQL * connect_ret=mysql_real_connect(connect_fd,"127.0.0.1",
       "root","123456","TestDb",3306,NULL,0);//连接数据库（拿遥控器和数据库进行配对）
   //127.0.0.1环回IP，可填对应机器的IP地址和端口号;第三个参数为用户名
   //第四个参数为密码；第五个参数为需要访问的数据库名字；第六个参数端口号，
   //端口号默认为3306，可以自己进行配置
   if(connect_ret==NULL){
     fprintf(stderr,"mysql connect failed\n");
     //连接失败：数据库IP地址或者用户名，数据库名不对……
     return 1;
   }
   fprintf(stderr,"mysql connect ok!\n");
   //2、拼装sql语句,组织命令
   const char* sql="select* from TestTable";//拼装的sql语句不需要加分号
   //对于线上的数据库尽量不要使用select*进行查询，会消耗大量的时间
   //3、把sql语句发送到服务器上
   //使用遥控器把命令发送给服务器
   int ret=mysql_query(connect_fd,sql);
   if(ret<0){
     fprintf(stderr,"mysql_query failed!%s\n",sql);
     return 1;
   }
   //4、读取并且遍历服务器的返回结果
   MYSQL_RES* result=mysql_store_result(connect_fd);
   if(result==NULL)
   {
     fprintf(stderr,"mysql_store_result failed!\n");
     return 1;
   }
   //a）获取到表里面有几行几列
   int rows=mysql_num_rows(result);
   int fields=mysql_num_fields(result);
   //b）获取到结果结合的表结构
   MYSQL_FIELD* field=mysql_fetch_field(result);//获取表头结构
   //获取到指针中的每一个内容
   while(field!=NULL){
     //循环的遍历表头的每一个字段，获取每一个表名
     printf("%s\t",field->name);
     field=mysql_fetch_field(result);
   }
   printf("<br>");
   //c)获取到每一个元素的具体值
   int i=0;
   for(;i<rows;++i){
     //获取到当前行
     MYSQL_ROW row=mysql_fetch_row(result);
     int j=0;//遍历列
     for(;j<fields;++j){
       printf("%s\t",row[j]);//取第几列的元素
     }
     printf("<br");
   }
   printf("<br");
   //5、断开链接（mysql服务器也害怕句柄泄漏）
   mysql_close(connect_fd);
   return 0;
}
